package com.itheima.d8_stream;
import java.util.*;
import java.util.stream.Collectors;

/**
   目标：初步体验Stream流的方便与快捷

 也叫Stream流，是Jdk8开始新增的一套API (java.util.stream.*)，可以用于操作集合或者数组的数据。
 优势： Stream流大量的结合了Lambda的语法风格来编程，提供了一种更加强大，更加简单的方式操作集合或者数组中的数据，代码更简洁，可读性更好。

 */
public class StreamTest1 {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强","曾季洪","老婆酱");
        System.out.println(names);
        // names = [张三丰, 张无忌, 周芷若, 赵敏, 张强]
        //          name

        //老方法写：把集合中所有以“张”开头，且是3个字的元素存储到一个新的集合。
        List<String> list = new ArrayList<>();
        for (String name : names) {
            if(name.startsWith("张") && name.length() == 3){
                list.add(name);
            }
        }
        System.out.println(list);

        System.out.println("---------把上面以前的写法，改为用stream流完成-----------");

        // 开始使用Stream流来解决这个需求。支持链式编程
        List<String> list2 = names.stream().filter(s -> s.startsWith("张"))    //变量s是随便写的，代表names集合里面的每一个数据
                .filter(a -> a.length()==3)         //继续调用filter方法限定条件，过滤流中的数据
                .collect(Collectors.toList());      //collect方法是收集的意思，Collectors.toList()意思是收集到一个list集合里面
        System.out.println(list2);

        System.out.println("----------------自己写一遍----------");
        List<String> list3 = names.stream().filter(e->e.contains("曾")||e.contains("老"))
                .collect(Collectors.toList());
        System.out.println(list3);
        names.stream().filter(z->z.contains("洪")||z.contains("老")).forEach(z-> System.out.println(z));
    }
}
